package br.com.vestibulation.dao;

import br.com.vestibulation.bean.Opcao;
import br.com.vestibulation.bean.Questao;
import java.util.ArrayList;

public class QuestaoDAO extends ConnectionFactory {

    public boolean adicionarQuestao(Questao questao){
        boolean sucesso = false;
        try{
            if(abrir()){
                stmt = conn.prepareStatement("INSERT INTO questoes(enunciadoQuestao, materiaQuestao) VALUES (?, ?)");
                stmt.setString(1, questao.getEnunciado());
                stmt.setString(2, questao.getMateria());
                stmt.executeUpdate();

                stmt = conn.prepareStatement("SELECT idQuestao FROM questoes WHERE enunciadoQuestao = ? AND materiaQuestao = ?");
                stmt.setString(1, questao.getEnunciado());
                stmt.setString(2, questao.getMateria());
                rs = stmt.executeQuery();

                int aux = 0;
                if(rs.next()){
                    aux = rs.getInt("idQuestao");
                }

                for(int i=0;i<questao.getListaOpcoes().size();i++){
                    stmt = conn.prepareStatement("INSERT INTO opcoes (idQuestao, txtOpcao, certaOpcao) VALUES (?, ?, ?)");
                    stmt.setInt(1, aux);
                    stmt.setString(2, questao.getListaOpcoes().get(i).getOpcao());
                    int isCerta = 0;
                    if(questao.getListaOpcoes().get(i).isCerta()){
                        isCerta = 1;
                    }
                    stmt.setInt(3, isCerta);
                    stmt.executeUpdate();
                }
                sucesso = true;
            }
        } catch(Exception ex){
        } finally{
            fechar();
        }
        return sucesso;
    }

    public ArrayList<Questao> listarQuestoes() {
        ArrayList<Questao> listaQuestoes = new ArrayList<Questao>();
        try {
            if (abrir()) {
                stmt = conn.prepareStatement("SELECT * FROM questoes");
                rs = stmt.executeQuery();
                while (rs.next()) {
                    Questao questao = new Questao();
                    questao.setNumero(rs.getInt("idQuestao"));
                    questao.setEnunciado(rs.getString("enunciadoQuestao"));
                    questao.setMateria(rs.getString("materiaQuestao"));
                    listaQuestoes.add(questao);
                }
                stmt = conn.prepareStatement("SELECT * FROM opcoes WHERE idQuestao = ?");
                for (int i = 0; i < listaQuestoes.size(); i++){
                    ArrayList<Opcao> opcoes = new ArrayList<Opcao>();
                    stmt.setInt(1, listaQuestoes.get(i).getNumero());
                    rs = stmt.executeQuery();
                    while (rs.next()){
                        Opcao opcao = new Opcao();
                        opcao.setNumero(rs.getInt("idOpcao"));
                        opcao.setOpcao(rs.getString("txtOpcao"));
                        int aux = rs.getInt("certaOpcao");
                        if (aux == 0) {
                            opcao.setCerta(false);
                        } else {
                            opcao.setCerta(true);
                        }
                        opcoes.add(opcao);
                    }
                    listaQuestoes.get(i).setListaOpcoes(opcoes);
                }
            }
        } catch (Exception ex) {
        } finally {
            fechar();
        }
        return listaQuestoes;
    }

    public boolean editarQuestao(Questao questao){
        boolean sucesso = false;
        try{
            if(abrir()){
                stmt = conn.prepareStatement("UPDATE questoes SET enunciadoQuestao = ?, materiaQuestao = ? WHERE idQuestao = ?");
                stmt.setString(1, questao.getEnunciado());
                stmt.setString(2, questao.getMateria());
                stmt.setInt(3, questao.getNumero());
                stmt.executeUpdate();

                for(int i=0; i<questao.getListaOpcoes().size(); i++){
                    stmt = conn.prepareStatement("UPDATE opcoes SET txtOpcao = ?, certaOpcao = ? WHERE idOpcao = ?");
                    stmt.setString(1, questao.getListaOpcoes().get(i).getOpcao());
                    if(questao.getListaOpcoes().get(i).isCerta()){
                        stmt.setInt(2, 1);
                    } else{
                        stmt.setInt(2, 0);
                    }
                    stmt.setInt(3, questao.getListaOpcoes().get(i).getNumero());
                    stmt.executeUpdate();
                }
                sucesso = true;
            }
        } catch(Exception ex){
        } finally{
            fechar();
        }
        return sucesso;
    }

    public boolean excluirQuestao(int idQuestao){
        boolean sucesso = false;
        try{
            if(abrir()){
                stmt = conn.prepareStatement("DELETE FROM opcoes WHERE idQuestao = ?");
                stmt.setInt(1, idQuestao);
                stmt.executeUpdate();

                stmt = conn.prepareStatement("DELETE FROM questoes WHERE idQuestao = ?");
                stmt.setInt(1, idQuestao);
                stmt.executeUpdate();
                
                sucesso = true;
            }
        } catch(Exception ex){
        } finally{
            fechar();
        }
        return sucesso;
    }

}